package com.rad.net.protocol.android.decoder;

import java.io.InputStream;

import com.rad.net.protocol.android.http.Response;
import com.rad.net.protocol.android.utils.IOUtils;
import com.rad.net.protocol.android.utils.JsonParser;


/** 
 * 类说明：  该类是 Json解码器的基类, 可以解析给定的 {@link Response} 对象并返回对应的结果
 * @author  xinhui.cheng
 * @date    2014-8-18
 * @version 1.0
 */
public abstract class BaseJsonDecoder implements Decoder {

	protected JsonParser mJsonParse;
	
	public BaseJsonDecoder(){
		mJsonParse = JsonParser.getJsonParse();
	}
	
	/**
	 * 获取解析需要的结果对象
	 * @param jsonString
	 * @return
	 */
	public abstract Class<?> getTargetClass(String jsonString);
	
	@Override
	public Object decode(Response response) {
		if(response == null){
			return null;
		}
		String jsonString = inputStream2String(response.getInputStream());
		Class<?> c = getTargetClass(jsonString);
		if(c == null){
			return null;
		}
		Object result = null;
		try {
			result = decodeJson(jsonString, c);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * 根据给定的json字符串解析成给定的class
	 * @param json	json字符串
	 * @param classOfT 要返回的类
	 * @return
	 */
	public <T> T decodeJson(String json, Class<T> classOfT) throws Exception{
		return mJsonParse.parseJson(json, classOfT);
	}
	
	/**
	 * 将给定的 {@link InputStream} 转换为string
	 * @param inputStream
	 * @return
	 */
	public  String inputStream2String(InputStream inputStream) {
		return IOUtils.inputStream2String(inputStream);
	}
	
}
